<?php
class Model_PCategory extends Zend_Db_Table_Abstract{
	protected $_name = 'product_category';
	protected $_dependentTable = array('Model_Product', 'Model_CategoryFilter', 'Model_ManCat');
	protected $_referenceMap = array(
				"Parent" => array(
					"columns" => "parent_id",
					"refTableClass" => "Model_PCategory",
					"refColumns" => "id"
				)
			  );
	/**
	 * 
	 * Lấy tất cả các thể loại sản phẩm
	 * @return Zend_Db_Table_Rowset
	 */
	function getAllCategories(){
		$arrPCategories = array();
		$arrPCategoriesLv1 = $this->fetchAll($this->select()->where('level = 1')->order('id'));
		foreach ($arrPCategoriesLv1 as $pCategoryLv1){
			$arrPCategories[] = $pCategoryLv1;
			$arrPCategoriesLv2 = $this->fetchAll('parent_id ='.$pCategoryLv1->id);
			foreach ($arrPCategoriesLv2 as $pCategoryLv2){
				$arrPCategories[] = $pCategoryLv2;
			}
		}
		
		return $arrPCategories;
	}
	/**
	 * Lấy các category lv1 đươc show trên hp
	 */
	function getAllShowedCategoriesLv1(){
		return $this->fetchAll('showed_on_hp = 1 AND level = 1');
	}
	/**
	 * 
	 * Lấy tất cả các thể loại sản phẩm
	 * @return Zend_Db_Table_Rowset
	 */
	function getAllCategoriesLv1(){
		return $this->fetchAll('level = 1');
	}
	
	/**
	 * Lấy tất cả các thể loại lv2 theo id thể loại lv1
	 * @param int categorylv1_id
	 * @return Zend_Db_Table_Rowset
	 */
	function getCategoryLv2ByIDLv1($id_lv1, $showed_on_hp = ''){
		if($showed_on_hp == ''){
			$select = $this->select()->where('parent_id ='.$id_lv1);
		}else{
			$select = $this->select()->where('parent_id ='.$id_lv1)->where('showed_on_hp = '.$showed_on_hp);
		}
		return $this->fetchAll($select);
	}
	/**
	 * 
	 * Lấy thể loại sản phẩm theo id
	 * @return Zend_Db_Table_Row
	 */
	function getCategoryByID($id){
		return $this->find($id)->current();
	}
	function getCategoryBySlug($slug){
		return $this->fetchRow("slug ='".$slug."'");
	}
	/**
	 * 
	 * Thêm thể loại sản phẩm
	 * @param string $name Tên thể loại sản phẩm
	 * @param int $parent_id Mã của thể loại cấp 1
	 * @param int $level Cấp độ
	 * @param bit $showed_on_hp Có được show trên homepage hay không
	 * @param string $ad_image URL ảnh quảng cáo đi kèm
	 * @return Mã thể loại sản phẩm
	 */
	function createCategory($name, $slug, $parent_id, $level, $showed_on_hp,$page_title, $page_description, $tag, $ad_image, $filter_ids){
		if($level == 1) $parent_id = 0;
		$pCategory = $this->createRow();
		$pCategory->name = $name;
		$pCategory->slug = $slug;
		$pCategory->parent_id = $parent_id;
		$pCategory->level = $level;
		$pCategory->showed_on_hp = $showed_on_hp;
		$pCategory->page_title = $name;
		$pCategory->page_description = $name;
		$pCategory->tag = $tag;
		$pCategory->ad_image = $ad_image;
		$pCategory->save();
		$id =  $this->_db->lastInsertId();
		if($id){
			$tblCatFilter = new Zend_Db_Table('cat_filter');
			if(is_array($filter_ids) && count($filter_ids) >0 ){
				foreach ($filter_ids as $filter_id){
					$catFilter = $tblCatFilter->createRow();
					$catFilter->cat_id = $id;
					$catFilter->filter_id = $filter_id;
					$catFilter->save();
				}
			}else if(is_numeric($filter_ids)){
				$catFilter = $tblCatFilter->createRow();
				$catFilter->cat_id = $id;
				$catFilter->filter = $filter_ids;
				$catFilter->save();
			}
			return $id;
		}
		
	}
	/**
	 * 
	 * Update thông tin thể loại sản phẩm
	 * @param int $id Mã thể loại sản phẩm
	 * @param string $name Tên thể loại sản phẩm
	 * @param int $parent_id Mã của thể loại cấp 1
	 * @param int $level Cấp độ
	 * @param bit $showed_on_hp Có được show trên homepage hay không
	 * @param string $ad_image URL ảnh quảng cáo đi kèm
	 * @return int Số bản ghi bị tác động
	 */
	function updateCategory($id, $name, $slug, $parent_id, $level, $showed_on_hp, $page_title, $page_description, $tag, $ad_image, $filter_ids){
		if($level == 1) $parent_id = 0;
		$data = array(
			'name'	=> $name,
			'slug'	=> $slug,
			'parent_id'	=> $parent_id,
			'level'	=> $level,
			'showed_on_hp'	=> $showed_on_hp,
			'page_title'	=> $page_title,
			'page_description'	=> $page_description,
			'tag'	=> $tag,
			'ad_image'	=> $ad_image
		);
		
		try{
			$this->update($data, 'id ='. $id);
			$this->deleteCatFilterByCatID($id);
			$tblCatFilter = new Zend_Db_Table('cat_filter');
			if(is_array($filter_ids) && count($filter_ids) >0 ){
				foreach ($filter_ids as $filter_id){
					$catFilter = $tblCatFilter->createRow();
					$catFilter->cat_id = $id;
					$catFilter->filter_id = $filter_id;
					$catFilter->save();
				}
			}else if(is_numeric($filter_ids)){
				$catFilter = $tblCatFilter->createRow();
				$catFilter->cat_id = $id;
					$catFilter->filter_id = $filter_ids;
					$catFilter->save();
			}
			return  true;
		} catch(Exception $ex){
			echo 'Caught exception: ',  $ex->getMessage(), "\n";
			return false;
		}
	}
	/**
	 * Xóa toàn 1 hoặc nhiều thể loại sản phẩm và thể loại con
	 * @param int|string Mã thể loại
	 * @return int Số thể loại bị xóa
	 */
	function deleteCategory($id){
		if(is_numeric($id)){
			return $this->delete("id = ".$id." OR parent_id = ".$id);
		}else{
			return $this->delete("id IN (".$id.") OR parent_id IN (".$id.")");
		}
	}
	public function deleteCatFilterByCatID($id){
		$tblCatFilter = new Zend_Db_Table('cat_filter');
		if(is_numeric($id)){
			$tblCatFilter->delete('cat_id ='. $id);
		}else if(is_string($id)){
			$tblCatFilter->delete("cat_id in (". $id .")");
		}
	}
}